Change inferring bin's name logic
authorJakub Matraszek <jakub.matraszek@gmail.com>
Sun, 14 May 2017 20:47:24 +0000 (22:47 +0200)
committerJakub Matraszek <jakub.matraszek@gmail.com>
Sun, 14 May 2017 20:47:24 +0000 (22:47 +0200)
src/cargo/util/toml.rs
tests/build.rs

index 771f48ddfda49e720db4cda8a7c52cfc516aef52..c9803cf91d2795a189470bf278c0bec701815c7d 100644 (file)
@@ -1422,11 +1422,25 @@ fn inferred_bin_path(bin: &TomlBinTarget,
         }
 
         return Path::new("src").join("bin").join(&format!("main.rs")).to_path_buf()
+    }
+
+    // bin_len > 1
+    let path = Path::new("src").join("bin").join(&format!("{}.rs", bin.name()));
+    if package_root.join(&path).exists() {
+        return path.to_path_buf()
+    }
+
+    let path = Path::new("src").join(&format!("{}.rs", bin.name()));
+    if package_root.join(&path).exists() {
+        return path.to_path_buf()
+    }
 
+    let path = Path::new("src").join("bin").join(&format!("main.rs"));
+    if package_root.join(&path).exists() {
+        return path.to_path_buf()
     }
 
-    // here we have multiple bins, so they are expected to be located inside src/bin
-    Path::new("src").join("bin").join(&format!("{}.rs", bin.name())).to_path_buf()
+    return Path::new("src").join(&format!("main.rs")).to_path_buf()
 }
 
 fn build_profiles(profiles: &Option<TomlProfiles>) -> Profiles {
index 0e76f569d96385d73d3998883a261c7cb29ede8d..13ab076616d6e7ca40c10e0d9af588ee97614943 100644 (file)
@@ -3010,6 +3010,68 @@ fn run_proper_binary_main_rs() {
                 execs().with_status(0));
 }
 
+#[test]
+fn run_proper_alias_binary_from_src() {
+    let p = project("foo")
+        .file("Cargo.toml", r#"
+            [package]
+            name = "foo"
+            authors = []
+            version = "0.0.0"
+            [[bin]]
+            name = "foo"
+            [[bin]]
+            name = "bar"
+        "#)
+        .file("src/foo.rs", r#"
+            fn main() {
+              println!("foo");
+            }
+        "#).file("src/bar.rs", r#"
+            fn main() {
+              println!("bar");
+            }
+        "#);
+
+    assert_that(p.cargo_process("build")
+                 .arg("--all"),
+                execs().with_status(0)
+                );
+    assert_that(process(&p.bin("foo")),
+                execs().with_status(0).with_stdout("foo\n"));
+    assert_that(process(&p.bin("bar")),
+                execs().with_status(0).with_stdout("bar\n"));
+}
+
+#[test]
+fn run_proper_alias_binary_main_rs() {
+    let p = project("foo")
+        .file("Cargo.toml", r#"
+            [package]
+            name = "foo"
+            authors = []
+            version = "0.0.0"
+            [[bin]]
+            name = "foo"
+            [[bin]]
+            name = "bar"
+        "#)
+        .file("src/main.rs", r#"
+            fn main() {
+              println!("main");
+            }
+        "#);
+
+    assert_that(p.cargo_process("build")
+                 .arg("--all"),
+                execs().with_status(0)
+                );
+    assert_that(process(&p.bin("foo")),
+                execs().with_status(0).with_stdout("main\n"));
+    assert_that(process(&p.bin("bar")),
+                execs().with_status(0).with_stdout("main\n"));
+}
+
 #[test]
 fn run_proper_binary_main_rs_as_foo() {
     let p = project("foo")